# Dependencies

-   GNU Guile as programming language
-   `guile-fslib` for handling of locations of static files in the file system
-   `guile-fibers` for the concurrent web server


## Environment creation

The dependencies specified above can be installed using GNU Guix and the following specifications for an environment:

Channels definition:

    guix describe --format='channels' > guix-env/channels.scm

Manifest:

    (specifications->manifest
     '("guile"
       "guile-fibers"
       "guile-json"
       "guile-fslib"))

Bash script for activating the environment:

    #!/usr/bin/env bash

    set -Eeuxo pipefail

    DIR=$(dirname "$(readlink -f "${0}")")

    guix time-machine \
         --channels="${DIR}/channels.scm" -- \
         environment \
         --manifest="${DIR}/manifest.scm"


# Usage


## Starting the server

1.  activate the GNU Guix environment:

        bash guix-env/env.bash

2.  Start the server:

        # GUILE_LOAD_PATH="$(pwd)/app:${GUILE_LOAD_PATH}"
        # once guile-fslib is on GNU Guix:
        # guile -L app app/main.scm
        # for now:
        pushd app
        guile -L . -L lib/fslib --fresh-auto-compile main.scm

3.  The website should now be reachable at `http://localhost:8080`.


# OUTDATED Unit tests

To run the unit tests, issue the `guile` command for the specific tests as follows:

    guile -L . test/test-path-handling.scm
